#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>

int main(int argc, char const *argv[])
{
    printf("main进程(%d)开始执行 \n", getpid());

    pid_t pid = fork();

    if (pid == 0) { // 子进程
        printf("子进程(%d)执行 \n", getpid());

        // 通过execve执行另一个程序: 内部会清空当前进程的内存，然后加载新的程序
        // execve只有执行失败才会返回， 如果找到指定的程序执行，就不会有返回
        char *path = "other";
        char *argv[] = {path, "atguigu", NULL}; // 要求数组的最后一个元素为NULL
        char *envp[] = {NULL}; // 环境变量数组，最后一个元素为NULL
        execve(path, argv, NULL);
        printf("execve执行失败\n");


    } else if (pid > 0) { // 父进程

        printf("父进程(%d)执行 \n", getpid());
    }
    
    
    printf("进程(%d)执行结束 \n", getpid());

    return 0;
}
